#! /usr/bin/ruby
#coding: UTF-8

require 'webrick'
require 'xml/xslt'

class Serv < WEBrick::HTTPServer
	def service(req, res)
		if req.path =~ /.*\.html$/ then
			# Extraction du nom de la page
			nom = req.path.gsub(".html", "")[1..-1].downcase
			
			system("cd Java && java Main && cd ..")
			if nom =~ /^personnes(-\d+)?$/ then
				if nom =~ /^personnes$/ then
					# Pas de critère précis
					xslt = XML::XSLT.new
					xslt.xsl = "Personnes.xslt"
					xslt.xml = "Personnes.xml"
					res.body = xslt.serve
				else
					# Extraction du numéro de la compétence
					nom =~ /^personnes(-\d+)?$/
					cid = Regexp.last_match(1)[1..-1]
					xslt = XML::XSLT.new
					xslt.xsl = "Personnes.xslt"
					xslt.xml = "Personnes.xml"
					xslt.parameters = {"cid" => cid}
					res.body = xslt.serve
				end
			elsif nom == "index" then
				File.readlines("html/index.html").each {|ligne| res.body << ligne.gsub("../", "./")}
			elsif nom == "competences" then
				xslt = XML::XSLT.new
				xslt.xsl = "Competences.xslt"
				xslt.xml = "Competences.xml"
				res.body = xslt.serve
			else
				# C'est un C.V.
				xslt = XML::XSLT.new
				xslt.xsl = "CV.xslt"
				xslt.xml = "CV/#{req.path.gsub(".html", ".xml")[1..-1]}"
				res.body = xslt.serve
			end
			
			# Dans tous les cas, ici, c'est du html
			res['Content-Type'] = "text/html"
		elsif req.path =~ /.*\.pdf$/ then
			system("cd Java && java Main && cd ..")
			# Extraction du nom du pdf
			nom = req.path.gsub(".pdf", "").gsub("pdf/", "")[1..-1]
			xslt = XML::XSLT.new
			xslt.xsl = "pdf/" + nom + ".xsl"
			xslt.xml = nom + ".xml"
			xslt.save("tmp#{nom}.fo")
			system("fop -fo tmp#{nom}.fo -pdf tmp#{nom}.pdf")
			File.readlines("tmp#{nom}.pdf").each {|ligne| res.body << ligne}
			system("rm tmp#{nom}.pdf")
			system("rm tmp#{nom}.fo")
		else
			# Si ce n'est pas un HTML ni un PDF, aucun traitement spécifique
			File.readlines("." + req.path).each {|ligne| res.body << ligne}
		end
	end
end

s = Serv.new(:Port => 3000, :DocumentRoot => '.')
trap("INT") {s.shutdown}
s.start
